package DoExercise.HSP_ZCY.A008_树.A001_普通二叉树;

/**
 * @Author: Du
 * @Date: 2021/7/13 12:22
 * <p>
 * 请把一段纸条竖着放在桌子上，然后从纸条的下边向上方对折1次，压出折痕后展开。
 * 此时折痕是凹下去的，即折痕突起的方向指向纸条的背面。
 * 如果从纸条的下边向上方连续对折2次，压出折痕后展开，此时有三条折痕，从上到下依次是下折痕、下折痕和上折痕。
 * 给定一个输入参数N，代表纸条都从下边向上方连续对折N次。
 * <p>
 * 请从上到下打印所有折痕的方向。
 * 例如:N=1时，打印: down N=2时，打印: down down up
 */
public class C12_折纸条问题
{
    public static void printAllFolds(int N)
    {
        printProcess(1, N, true);
    }
    
    
    /**
     *
     * 折完纸条，生成的这棵树，所有的左树一定是凹折痕，所有的右树一定是凸折痕
     * 可以通过中序遍历的方式打印这棵树
     *
     * @param i
     * @param N
     * @param down
     */
    public static void printProcess(int i, int N, boolean down)
    {
        if (i > N) return;
        printProcess(i + 1, N, true);
        System.out.println(down ? "凹 " : "凸 ");
        printProcess(i + 1, N, false);
    }
    
    public static void main(String[] args)
    {
        int N = 3;
        printAllFolds(N);
    }
    
}
